package com.molichuxing.services.infrastructure.service;

import java.util.List;
import java.util.Map;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.services.infrastructure.dto.request.create.InsuranceCreateDto;
import com.molichuxing.services.infrastructure.dto.request.modify.InsuranceModifyDto;
import com.molichuxing.services.infrastructure.dto.response.InsuranceDto;
import com.molichuxing.services.property.CarInsuranceTypeEnum;

/**
 * <p>
 * 保险表 服务类
 * </p>
 *
 * @author xuelin yi
 * @since 2019-08-20
 */
public interface InsuranceService {

	/**
	 * 根据条件分页查询保险信息 code 保单号 carIds 车辆id集合 type 保险类别：1-交强险，2-商业险',
	 * insuranceCompanyId 保险公司ID insureStartTime 投保开始时间 insureEndTime 投保结束时间
	 * beginStartTime 起保开始时间 beginEndTime 起保结束时间 endStartTime 终保开始时间 endEndTime
	 * 终保结束时间
	 * 
	 * @param mapParam
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	public Paged<InsuranceDto> getInsurancePage(Map<String, Object> mapParam, Integer pageNum, Integer pageSize);

	/**
	 * 根据条件查询保险信息
	 * 
	 * @param insuranceEnum
	 * @return
	 */
	public List<InsuranceDto> getInsurance(CarInsuranceTypeEnum insuranceEnum);

	/**
	 * 根据保险ID查询保险信息
	 * 
	 * @param compulsoryInsuranceId
	 * @return
	 */
	public InsuranceDto getCompulsoryInsuranceById(int compulsoryInsuranceId);

	/**
	 * 根据保险ID修改保险信息
	 * 
	 * @param modifyDto
	 * @return
	 */
	public Boolean modifyCompulsoryInsurance(InsuranceModifyDto modifyDto);

	/**
	 * 新增保险信息
	 * 
	 * @param createDto
	 * @return
	 */
	public Boolean createInsurance(InsuranceCreateDto createDto);

	/**
	 * 根据车辆ID查询保险信息
	 * 
	 * @param carId
	 * @return
	 */
	public List<InsuranceDto> getInsuranceByCarId(Integer carId, CarInsuranceTypeEnum carInsuranceTypeEnum);

	/**
	 * 根据状态和类型查询总数
	 * 
	 * @param type
	 * @param status
	 * @return
	 */
	int getInsuranceTabCount(int type, int status);

	public InsuranceDto getInsuranceByCode(String code);

	/**
	 * 根据车辆，获取此车辆最后一次投保（按照end_time倒序取最后一个）
	 * 
	 * @param carId
	 * @return
	 */
	public InsuranceDto getLastInsuranceByCarIdAndType(Integer carId, Integer type);
	
	/**
	 * 根据车辆，获取此车辆最后一次投保（按照end_time倒序取最后一个）
	 *  如果过保 则返回空
	 * @param carId
	 * @return
	 */
	public InsuranceDto getInsuranceByCarIdAndType(Integer carId, Integer type);

	public Integer createImportInsurance(InsuranceCreateDto createDto);

	/**
	 * 保险导出
	 * 
	 * @param mapParam
	 * @return
	 */
	public List<InsuranceDto> getDownloadInsuranceList(Map<String, Object> mapParam);

	/**
	 * 保险导出count
	 * 
	 * @param mapParam
	 * @return
	 */
	public Long getDownloadInsuranceCount(Map<String, Object> mapParam);

	/**
	 * 查询保险公司ids
	 * 
	 * @param selectParams
	 * @return
	 */
	public List<Integer> getInsuranceCompanyIds(Map<String, Object> selectParams);

    List<InsuranceDto> getInsuranceListImgIsNotNull();

	void createInsuranceImgByPdf();
}
